package com.ruge.common.jpa;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 框架通用的基础repository接口
 * @param <T>
 * @param <ID>
 */
@NoRepositoryBean
public interface BaseRepository<T, ID extends Serializable>
        extends
        JpaRepository<T, ID>,
        JpaSpecificationExecutor<T>,
        PagingAndSortingRepository<T, ID> {

    /**
     * 批量保存
     * @param var1
     * @param <S>
     * @return
     */
    <S extends T> Iterable<S> batchSave(Iterable<S> var1);

    /**
     * 批量更新
     * @param var1
     * @param <S>
     * @return
     */
    <S extends T> Iterable<S> batchUpdate(Iterable<S> var1);

    /**
     * 批量操作
     * @param map
     * @return
     */
    List<T> batch(Map<String,List<T>> map);
    /**
     * 基于原生态的sql进行查询
     * @param sql
     * @return
     */
    List<Map<String,Object>> findAllBySql(String sql);

    /**
     * 基于Hibernate的HQL进行查询
     * @param hql
     * @return
     */
    List<Map<String,Object>> findAllByHql(String hql);

}
